from django.db import models


class Author(models.Model):
    """作者表"""
    # id = models.AutoField(primary_key=True)
    # 其实模型类中的id主键字段不需要我们手动指定，django的orm默认会给每张表都添加一个id字段并且为主键，如果我们自己指定了主键，以我们自己指定的为准,就不会自动帮你添加主键字段了
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    sex_type = ((1, '男性'), (2, '女性'), (3, '保密'))
    sex = models.IntegerField(choices=sex_type, default=1)
    ad = models.ForeignKey('AuthorDetail', on_delete=models.CASCADE)

    def __str__(self):
        return self.name


class AuthorDetail(models.Model):
    """作者详细信息表"""
    birthday = models.DateField()
    telephone = models.CharField(max_length=24)
    address = models.CharField(max_length=64)


class Publish(models.Model):
    name = models.CharField(max_length=64)
    city = models.CharField(max_length=64)

    def __str__(self):
        return self.name


class Book(models.Model):
    title = models.CharField(max_length=64, verbose_name='书籍')
    pub_date = models.DateField(verbose_name='日期')
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='价格')
    pub = models.ForeignKey('Publish', verbose_name='出版社')
    # ForeignKey这个类，生成数据库字段的时候，会自动将该属性名称_id作为我们的数据库字段名称
    authors = models.ManyToManyField('Author', verbose_name='作者')

    class Meta:
        index_together = ['title', 'pub_date']

    # authors在执行数据库同步指令之后，不会生成字段，而是会帮我们生成一个第三张表，这个表就是书籍表和作者表的多对多关系表
    def __str__(self):
        return self.title

    def get_all_author(self):
        return ','.join([author.name for author in self.authors.all()])
